package com.edu.exam.enums.grading;

import com.edu.exam.enums.core.BaseEnum;

/**
 * 导入模式枚举
 *
 * <p>定义成绩批量导入的处理模式，包括同步、异步、批处理等。</p>
 *
 * @author System
 * @version 1.0.0
 * @since 2025-11-14
 */
public enum ImportMode implements BaseEnum {

    /** 同步模式 */
    SYNC("SYNC", "同步模式"),

    /** 异步模式 */
    ASYNC("ASYNC", "异步模式"),

    /** 批处理模式 */
    BATCH("BATCH", "批处理模式"),

    /** 流式模式 */
    STREAM("STREAM", "流式模式"),

    /** 调度模式 */
    SCHEDULED("SCHEDULED", "调度模式"),

    /** 手动确认模式 */
    MANUAL_CONFIRM("MANUAL_CONFIRM", "手动确认"),

    /** 自动模式 */
    AUTO("AUTO", "自动模式"),

    /** 试运行模式 */
    DRY_RUN("DRY_RUN", "试运行");

    private final String code;
    private final String description;

    ImportMode(String code, String description) {
        this.code = code;
        this.description = description;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getDescription() {
        return description;
    }

    @Override
    public String toString() {
        return description;
    }

    /**
     * 根据代码获取枚举值
     *
     * @param code 代码
     * @return 对应的枚举值
     * @throws IllegalArgumentException 如果代码无效
     */
    public static ImportMode fromCode(String code) {
        for (ImportMode mode : values()) {
            if (mode.getCode().equals(code)) {
                return mode;
            }
        }
        throw new IllegalArgumentException("Unknown import mode code: " + code);
    }

    /**
     * 根据描述获取枚举值
     *
     * @param description 描述
     * @return 对应的枚举值
     * @throws IllegalArgumentException 如果描述无效
     */
    public static ImportMode fromDescription(String description) {
        for (ImportMode mode : values()) {
            if (mode.getDescription().equals(description)) {
                return mode;
            }
        }
        throw new IllegalArgumentException("Unknown import mode description: " + description);
    }
}